package servicios;
import java.util.ArrayList;
import java.util.List;

import aterrizar.Usuario;
import daos.SessionManager;
import servicios.Operation;
import model.Asiento;


public class ReservarGrupoAsientos implements Operation<List<Asiento>> {


	private List<Long> codAsientos;
	private Usuario usuario;
	
	public ReservarGrupoAsientos(List<Long> codAsientos,Usuario usuario){
		this.codAsientos = codAsientos;
		this.usuario = usuario;
	}
	
	public List<Asiento> execute() {
		List<Asiento> asientosAux = this.getAsientosAReservar();
		if(!this.todosDisponibles(asientosAux)){
			for (Asiento asiento : asientosAux) {
					asiento.setEstaReservado(true);
					asiento.setUsuario(this.usuario);
				}
				
		}else{
				throw new RuntimeException("No se pudo realizar la reserva! :(");
		}
		
		return asientosAux;
		}

	@SuppressWarnings("unchecked")
	private List<Asiento> getAsientosAReservar(){
		List<Asiento> retAsientos= new ArrayList<Asiento>();
		retAsientos=SessionManager.getSession().createCriteria(Asiento.class)
				.list();
		for(Asiento a : retAsientos){
			if (!codAsientos.contains(a.getCodAsiento()))
				retAsientos.remove(a);
			
		}
		
		return retAsientos;
	}
	
	private boolean todosDisponibles(List<Asiento> asientosP){
		boolean todosDisponibles = true;
		for(Asiento a : asientosP ){
			todosDisponibles &= a.getEstaReservado();
		}
		return todosDisponibles;
	}
		
}
